package Demo;

public class Demo_402 {
    public static void main(String[] args) throws InterruptedException {
        //初始化累加对象
        Counter402 counter = new Counter402();

        //创建两个线程对一个变量进行累加
        Thread t1 = new Thread(()->{
            //5万次
            for (int i=0;i<50000;i++){
                counter.increase();  //通过counter.increase()方法对counter进行递增操作，每次递增1并循环5万次
            }
        });

        Thread t2 = new Thread(()->{
            //5万次
            for (int i=0;i<50000;i++){
                counter.increase();  //通过counter.increase()方法对counter进行递增操作，每次递增1并循环5万次
            }
        });

        //启动线程
        t1.start();
        t2.start();

        //等待线程执行完成
        t1.join();
        t2.join();

        //查看运行结果
        System.out.println("count ="+counter.count);  //10万次
    }
}



//专门用来累加的类，方法二
class Counter402{
    //初始值是0
    public int count = 0;
    //累加方法
  public void increase(){
      //真实业务中，在执行加锁的代码块之前有很多的数据获取或其他的可以并行执行的逻辑


      synchronized (this){  //在执行这个代码块期间，当前对象(Count402类的实例)会被锁定，其他线程不会同步这个代码块
          count++;
      }
  }
}